/*
 * 版权所有 (C) 2015 知启蒙(ZHIQIM) 保留所有权利。[遇见知启蒙，邂逅框架梦]
 * 
 * https://zhiqim.org/project/zhiqim_framework/zhiqim_kernel.htm
 *
 * Zhiqim Kernel is licensed under Mulan PSL v2.
 * You can use this software according to the terms and conditions of the Mulan PSL v2.
 * You may obtain a copy of Mulan PSL v2 at:
 *          http://license.coscl.org.cn/MulanPSL2
 * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
 * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
 * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
 * See the Mulan PSL v2 for more details.
 */
package org.zhiqim.kernel.constants;

import java.math.BigDecimal;

import org.zhiqim.kernel.annotation.AnAlias;

/**
 * 符号常量定义
 *
 * @version v1.0.0 @author zouzhigang 2014-2-27 新建与整理
 */
@AnAlias("SignConstants")
public interface SignConstants extends AsciiConstants
{
    /****************************************************************************/
    //ID定义，13/16/19位
    /****************************************************************************/
    
    /** 13位数字 */
    long ID13                            = 1000000000000L;
    
    /** 16位数字 */
    long ID16                            = ID13 * 1000;
    
    /** 19位数字 */
    long ID19                            = ID16 * 1000;
    
    /****************************************************************************/
    //字节长度定义，注意KiB和KB的区别
    /****************************************************************************/
    
    /** 千字节（kibibyte） */
    int KiB                              = 1024;
    
    /** 兆字节（mebibyte） */
    int MiB                              = 1 << 20;
    
    /** 吉字节（gibibyte） */
    int GiB                              = 1 << 30;
    
    /** 太字节（tebibyte） */
    int TiB                              = 1 << 40;
    
    /** pebibyte */
    int PiB                              = 1 << 50;
    
    /** exbibyte */
    int EiB                              = 1 << 60;
    
    /** zebibyte */
    int ZiB                              = 1 << 70;
    
    /** yobibyte */
    int YiB                              = 1 << 80;
    
    /** 千字节（kilobyte） */
    int KB                               = 1000;
    
    /** 百万字节（megabyte） */
    int MB                               = KB * 1000;
    
    /** 十亿字节（gigabyte） */
    int GB                               = MB * 1000;
    
    /** 万亿字节（terabyte） */
    int TB                               = GB * 1000;
    
    /** 千万亿字节（petabyte） */
    int PB                               = TB * 1000;
    
    /** 百亿亿字节（exabyte） */
    int EB                               = PB * 1000;
    
    /** 十万亿亿字节（zettabyte） */
    int ZB                               = EB * 1000;
    
    /** 亿亿亿字节（yottabyte） */
    int YB                               = ZB * 1000;
    
    /****************************************************************************/
    //常用整数定义
    /****************************************************************************/
    
    /** 无究数（-1） */
    int _INFINITE_                       = -1;
    
    /** 1小时 */
    int _HOUR_                           = 60 * 60 * 1000;
    
    /** 8小时 */
    int _HOUR_8_                         = 8 * 60 * 60 * 1000;
    
    /****************************************************************************/
    //常用的BigDecimal定义
    /****************************************************************************/
    
    /** 0 */
    BigDecimal _B_0_                    = BigDecimal.ZERO;
    
    /** 1 */
    BigDecimal _B_1_                    = BigDecimal.ONE;
    
    /** 2 */
    BigDecimal _B_2_                    = new BigDecimal(2);
    
    /** 10 */
    BigDecimal _B_10_                   = BigDecimal.TEN;
    
    /** 100 */
    BigDecimal _B_100_                  = new BigDecimal(100);
    
    /** 1000 */
    BigDecimal _B_1K_                   = new BigDecimal(1000);
    
    /** 10000 */
    BigDecimal _B_1W_                   = new BigDecimal(10000);
    
    /** 0.1 */
    BigDecimal _B_0_1_                  = new BigDecimal("0.1");
    
    /** 0.01 */
    BigDecimal _B_0_01_                 = new BigDecimal("0.01");
    
    /** 0.01 */
    BigDecimal _B_0_001_                = new BigDecimal("0.001");
    
    /** 0.001 */
    BigDecimal _B_0_0001_               = new BigDecimal("0.0001");
    
    /** 0.5 */
    BigDecimal _B_0_5_                  = new BigDecimal("0.5");
    
    /** 0.6 */
    BigDecimal _B_0_6_                  = new BigDecimal("0.6");
    
    /** 0.7 */
    BigDecimal _B_0_7_                  = new BigDecimal("0.7");
    
    /** 0.8 */
    BigDecimal _B_0_8_                  = new BigDecimal("0.8");
    
    /** 0.9 */
    BigDecimal _B_0_9_                  = new BigDecimal("0.9");
    
    /** 0.95 */
    BigDecimal _B_0_95_                 = new BigDecimal("0.95");
    
    /** 0.98 */
    BigDecimal _B_0_98_                 = new BigDecimal("0.98");
    
    /** 0.99 */
    BigDecimal _B_0_99_                 = new BigDecimal("0.99");
    
    /** 1.01 */
    BigDecimal _B_1_01_                 = new BigDecimal("1.01");
    
    /** 1.02 */
    BigDecimal _B_1_02_                 = new BigDecimal("1.02");
    
    /** 1.05 */
    BigDecimal _B_1_05_                 = new BigDecimal("1.05");
    
    /** 1.1 */
    BigDecimal _B_1_1_                  = new BigDecimal("1.1");
    
    /** 1.2 */
    BigDecimal _B_1_2_                  = new BigDecimal("1.2");
    
    /** 1.3 */
    BigDecimal _B_1_3_                  = new BigDecimal("1.3");
    
    /** 1.4 */
    BigDecimal _B_1_4_                  = new BigDecimal("1.4");
    
    /** 1.5 */
    BigDecimal _B_1_5_                  = new BigDecimal("1.5");
    
    /** 四啥五入 */
    int _B_H_                           = BigDecimal.ROUND_HALF_UP;
    
    /** 天花板 */
    int _B_C_                           = BigDecimal.ROUND_CEILING;
    
    /** 地板 */
    int _B_F_                           = BigDecimal.ROUND_FLOOR;
    
    /****************************************************************************/
    //常用字符串定义
    /****************************************************************************/
    
    /** true字符串 */
    String _TRUE_                        = "true";
    
    /** false字符串 */
    String _FALSE_                       = "false";
    
    /** null字符串 */
    String _NULL_                        = "null";
    
    /** 空字符串 */
    String _EMPTY_                       = "";
    
    /** 0字符串 */
    String _ZERO_                        = "0";
    
    /** 一个空格字符串，也可以直接使用_SPACE_ */
    String _ONE_                         = " ";
    
    /** 双空格字符串 */
    String _TWO_                         = "  ";
    
    /** 四空格字符串 */
    String _FOUR_                        = "    ";
    
    /** 制表符 */
    String _TAB_                         = "\t";
    
    /** 回车符 */
    String _LR_                          = "\r";
    
    /** 换行符 */
    String _LN_                          = "\n";
    
    /** 回车换行 */
    String _BR_                          = "\r\n";
    
    /** 只读 */
    String _RO_                          = "r";
    
    /** 读写 */
    String _RW_                          = "rw";
    
    /** ID */
    String _ID_                          = "id";
    
    /** 名称 */
    String _NAME_                        = "name";
    
    /** 键 */
    String _KEY_                         = "key";
    
    /** 字段 */
    String _FIELD_                       = "field";
    
    /** 值 */
    String _VALUE_                       = "value";
    
    /** 类型 */
    String _TYPE_                        = "type";
    
    /** 页 */
    String _PAGE_                        = "page";
    
    /** 版本 */
    String _VERSION_                     = "version";
    
    /** 类 */
    String _CLASS_                       = "class";
    
    /** 类路径 */
    String _CLASSPATH_                   = "classpath";
    
    /** 目录 */
    String _DIRECTORY_                   = "directory";
    
    /** 源 */
    String _SRC_                         = "src";
    
    /** 目标 */
    String _DST_                         = "dst";
    
    /** 编码 */
    String _ENCODING_                    = "encoding";
    
    /** 字符集 */
    String _CHARSET_                     = "charset";
    
    /** 输入 */
    String _INPUT_                       = "input";
    
    /** 输出 */
    String _OUTPUT_                      = "output";
    
    /** 常用的PNG类型 */
    String _PNG_                         = "png";
    
    /** 公开 */
    String _PUBLIC_                      = "public";
    
    /** 保护 */
    String _PROTECTED_                   = "protected";
    
    /** 私有 */
    String _PRIVATE_                     = "private";
    
    /** 整型 */
    String _INT_                         = "int";
    
    /** 长整型 */
    String _LONG_                        = "long";
    
    /** 浮点型 */
    String _FLOAT_                       = "float";
    
    /** 双点型 */
    String _DOUBLE_                      = "double";
    
    /** 间隔 */
    String _INTERVAL_                    = "Interval";
    
    /** Socket关闭 */
    String _SOCKET_CLOSED_               = "Socket closed";
    
    /** 本机地址 */
    String _127_0_0_1_                   = "127.0.0.1";
    
    /****************************************************************************/
    //常用字符组合定义
    /****************************************************************************/
    
    /** 数字 */
    String _DIGITS_                      = "0123456789";
    
    /** 十六进制数字 */
    String _DIGITS_HEX_                  = "0123456789abcdefABCDEF";
    
    /** 小写字母 */
    String _LETTERS_LOWERCASE_           = "abcdefghijklmnopqrstuvwxyz";
    
    /**  小写字母+数字 */
    String _LETTERS_LOWERCASE_DIGITS_   = "0123456789abcdefghijklmnopqrstuvwxyz";

    /** 大写字母 */
    String _LETTERS_UPPERCASE_          = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";

    /** 大写字母+数字 */
    String _LETTERS_UPPERCASE_DIGITS_   = _LETTERS_UPPERCASE_ + _DIGITS_;
    
    /** 全部字母 */
    String _LETTERS_                    = _LETTERS_UPPERCASE_ + _LETTERS_LOWERCASE_;

    /** 全部字母数字 */
    String _LETTERS_DIGITS_             = _LETTERS_ + _DIGITS_;
    
    /** 电话号码里允许的不是数字的chars ,两边括号,横线,空格*/
    String _PHONE_NUMBER_DELIMITERS_    = "+()- ";
    
    /** 全球电话号码允许"+"号的chars*/
    String _PHONE_NUMBER_CHARS          = _PHONE_NUMBER_DELIMITERS_ + _DIGITS_;
    
    /** 常用于账号和密码的9个特殊字符 */
    String _SYMBOL_F_                   = ".`_~!@#$%";
    
    /****************************************************************************/
    //常用数组定义，更多的定义在EnumConstants中
    /****************************************************************************/
    
    /** 空字节数组 */
    byte[] _EMPTY_B_                    = {};
    
    /** 空整型数组 */
    int[] _EMPTY_I_                     = {};
    
    /** 空整型数组 */
    long[] _EMPTY_L_                    = {};
    
    /** 空字符串数组 */
    String[] _EMPTY_S_                  = {};
    
    /** 回车换行字节数组 */
    byte[] _CRLF_                       = {_CR_, _LF_};
}
